import time

from selenium.webdriver.common.by import By

from utils.webdriver_factory import WebDriverFactory
from selenium.webdriver.support.wait import WebDriverWait
import selenium.webdriver.support.expected_conditions as EC

"""
expected_condition是selenium提供的一个断言库，可以使用import *导入全部断言
"""
driver = WebDriverFactory.get_instance()
# 三种等待

# 强制等待
time.sleep(3)

# 隐式等待
"""
隐式等待作用于整个driver生命周期，在最开始设置一个最长的等待时间，如果在规定的时间内，
元素加载完成就执行下一步操作，否则就一直等到时间结束，然后才执行下一步
"""
driver.implicitly_wait(1)

# 显式等待
"""
加入显示等待后会每隔一段时间轮询判断条件是否成立，默认时间是0.5秒
 driver,需要提供一个驱动对象
 timeout: float,设置超时
 poll_frequency: float = POLL_FREQUENCY,轮询周期
 ignored_exceptions 忽略的异常
"""
driver.get('http://www.baidu.com')
search_button = driver.find_element(By.ID, 'su')

# until或until_not需要一个回调方法 以及断崖失败后提供的message
WebDriverWait(driver, 5).until(EC.visibility_of(search_button), '搜索按钮不存在!')
WebDriverWait(driver, 5).until_not(EC.invisibility_of_element(search_button), '搜索按钮不存在!')

"""
如果既设置了隐式等待也设置了显式等待，那么程序会根据谁设置的超时时间越长来按照它的执行
"""